#ifndef _RB_TREE_H_
#define _RB_TREE_H_
#include <stdio.h>
#include <stdlib.h>

#define  Red     0
#define  Black   1

typedef struct RB_Node
{
    /* data */
    void* val;    

    char color;
    struct RB_Node* parent;
    struct RB_Node* left;
    struct RB_Node* right;
    
}RB_Node;

typedef struct RB_TREE
{
    RB_Node* root;
    RB_Node* nil;
#if 1
    /* 比较函数 */
    int (*compareFunc)(void* val1, void* val2);
    
    /* 打印函数 */
    void (*printFunc)(void* val);
#endif
}RB_TREE;

/* 红黑树初始化 */
int RBTree_Init(RB_TREE** rbtree, int compareFunc(void* val1, void* val2), void printFunc(void* val));

/* 红黑树插入元素 */
int RBTree_Insert(RB_TREE* rbtree, void* value);

/* 红黑树删除元素 */
int RBTree_Delete(RB_TREE* rbtree, void* value);

/* 红黑树获取元素 */
RB_Node* RBTree_Search(RB_TREE* rbtree, void* value);

/* 红黑树前序遍历 */

/* 红黑树中序遍历 */

/* 红黑树后序遍历 */

/* 红黑树层序遍历 */
int RBTree_LevelOrder(RB_TREE* rbtree);
/* 红黑树销毁 */
int RBTree_LevelDestroy(RB_TREE* rbtree);
#endif